# 请从字符串中找出一个最长的不包含重复字符的子字符串，计算该最长子字符串的长度。
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/
# 输入: "abcabcbb"
# 输出: 3
# 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。


class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) < 2:
            return len(str)
        res = 0
        start = 0
        dic = {}

        for idx, ch in enumerate(s):
            if ch in dic:
                start = max(start, dic[ch] + 1)

            dic[ch] = idx
            res = max(res, idx - start + 1)
        return res
